package util

import (
	_ "github.com/go-sql-driver/mysql"
	"github.com/jinzhu/gorm"
	"log"
	"strconv"
	"sync"
)

/*
* MysqlConnectiPool
* 数据库连接操作库
* 基于gorm封装开发
 */
type MysqlConnPool struct {
}

var instanceOfMysqlPool *MysqlConnPool
var onceOfMysql sync.Once

var mysqlHandler *gorm.DB
var errOfMysqlHandler error

func GetMysqlPool() *MysqlConnPool {
	onceOfMysql.Do(func() {
		instanceOfMysqlPool = &MysqlConnPool{}
	})
	return instanceOfMysqlPool
}

/*
* @fuc 初始化数据库连接(可在mail()适当位置调用)
 */
func (m *MysqlConnPool) InitDataPool() (issucc bool) {
	source := GetDatabase("database")
	mysqlHandler, errOfMysqlHandler = gorm.Open("mysql", source)
	if errOfMysqlHandler != nil {
		log.Fatal(errOfMysqlHandler)
		return false
	}
	//关闭数据库，db会被多个goroutine共享，可以不调用
	// defer db.Close()
	dbLog := GetSystemValue("db_log")
	if enable, err := strconv.ParseBool(dbLog); err == nil {
		mysqlHandler.LogMode(enable)
	}
	return true
}

/*
* @fuc  对外获取数据库连接对象db
 */
func (m *MysqlConnPool) Handler() (conn *gorm.DB) {
	return mysqlHandler
}
